package cn.yitun.chat.yitunservermanagecore.general.manage.system.service;

import cn.yitun.chat.yitunservercommonlib.basebean.web.JwtUserDto;
import cn.yitun.chat.yitunservercommonlib.crud.yitun.CrudService;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.common.Tree;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.system.MenuDto;
import cn.yitun.chat.yitunservercommonlib.dataentity.po.system.MenuInfo;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.system.MenuTreeTableVo;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.system.MenuVo;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.system.RouterVo;

import java.util.List;

/**
 * date 2018-06-04 17:20:12<br>
 * @author yitun<br>
 * @since
 */
public interface MenuService
		extends CrudService<MenuDto, MenuInfo, MenuVo> {

	List<MenuInfo> queryList(MenuDto menu);

	List<MenuVo> listVo(MenuDto menu);

	/**
	 * 修改菜单图标 <br>
	 * @param id
	 * @param flag
	 */
	int updateIcon(Long id, String flag);

	/**
	 * description 条件获取菜单
	 * @param menuQuery
	 */
	List<MenuInfo> list(MenuDto menuQuery);

	/**
	 * 获取角色菜单
	 * @param roleId
	 * @return
	 */
	List<MenuVo> getRoleMenuListByRoleId(Long roleId);

	/**
	 * 获取用户权限
	 * @param userId
	 * @return
	 */
	List<MenuVo> getUserMenuListByCurrentUserId(Long userId);

	/**
	 * 获取用户菜单树
	 * @param jwtUserDto
	 * @return
	 */
	Tree<MenuVo> getTree(JwtUserDto jwtUserDto);

	/**
	 * 角色表格树
	 * @param currentLoginUser
	 * @return
	 */
	List<MenuTreeTableVo> treeTable(JwtUserDto currentLoginUser);

	/**
	 * 更新菜单状态
	 * @param id
	 * @param visible
	 */
	int updateVisible(Long id, Boolean visible);

	/**
	 * 获取角色下的权限所有id
	 * @param roleId
	 * @return
	 */
	List<Long> menuIdsByRoleId(Long roleId);

	/**
	 * 用户路由
	 * @param userDTO
	 * @return
	 */
	List<RouterVo> routerInfosByUserId(JwtUserDto userDTO);

	/**
	 * 校验菜单名称是否唯一
	 * @param menuInfo
	 * @return
	 */
	Boolean checkMenuNameUnique(MenuInfo menuInfo);

	/**
	 * 用户权限
	 * @param userId
	 * @return
	 */
    List<String> selPermList(Long userId);

	void removeMenu(Long menuId);
}
